<?php

/* 
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

namespace common\lib\Qiniu;

require_once  __DIR__.'/autoload.php';

// 引入鉴权类
use Qiniu\Auth;
// 引入上传类
use Qiniu\Storage\UploadManager;

//echo QiniuUploadFile('1.xlsx','x.xlsx',$authConfig); //上传本地文件实例
//echo QiniuDownAndUp('http://www.w3school.com.cn/php/func_array.asp','1.txt',$authConfig);//下载远程文件，并上传到七牛
//echo QiniuNewFileName('232.docx ');//生成随机文件名
//var_dump(QiniuUpOfficeToPdf('file',$authConfig));//上传office文件到七牛，并生成pdf
//var_dump(QiniuPdfGetImages('http://developer.qiniu.com/resource/dive-into-golang.pdf', $authConfig));//从七牛的pdf生成4张缩略图
//上传七牛账户和配置
//$authConfig = array(
//    'bucket' => 'jinhua',   // 要上传的空间
//    'accessKey'=> '8W1oVEEWijgf62_chny1Yh6xh6zXhPMIhesz_vOa',   // 需要填写你的 Access Key
//    'secretKey'=> 'xx4pb4QVkDfhPEcsNZowO4T3QtfD7iORYgGTiKsx',   // 需要填写你的 Secret Key
//    'domain'=> '7xp3e9.com1.z0.glb.clouddn.com',   // 填写空间域名或者自行绑定域名
//    'temp'=> 'temp'   // 文件临时缓存文件夹，存完即删，确保有读写入权限
//    );
//$qi = new UpFile();
//echo $qi->QiniuPdfGetImages('http://developer.qiniu.com/resource/dive-into-golang.pdf', $authConfig);

class UpFile
{

/*
 * 上传office文件到七牛，并转化为pdf文件后下载并上传到七牛
 * 文件上传输入框名称、账户配置
 * 返回数组，url：pdf下载真实网址，pdf文件名
 */
public function QiniuUpOfficeToPdf($file,$authConfig)
{
    if($_FILES[$file]["size"] >30*1024*1024)
    {
        return 'max size';
    }
    if($_FILES[$file]["size"] <2)
    {
        return 'no date';
    }
    $newFile  = $this->QiniuNewFileName($_FILES[$file]['name']);
    $url = $this->QiniuUploadFile($_FILES[$file]['tmp_name'], $newFile, $authConfig);
    $newUrl = $url.'?odconv/pdf';
    $pdfName = $this->QiniuNewFileName('0.pdf');
    $pdfUrl =  $this->QiniuDownAndUp($newUrl,$pdfName,$authConfig);
    return array(
        'url'=>$pdfUrl,
        'name'=>$pdfName,
        'oldname'=>$_FILES[$file]['name'],
        'size'=> $_FILES[$file]["size"],
        'ext'=> pathinfo($_FILES[$file]['name'], PATHINFO_EXTENSION),
    );
}

/*
 * 从pdf中获取4张略缩图
 * pdf地址、账户配置信息
 * 返回图片数组
 */
public function QiniuPdfGetImages($pdfUrl,$authConfig)
{
    $pageInfo = file_get_contents($pdfUrl.'?odconv/jpg/info');
    $page = json_decode($pageInfo,true);
    
    $p =(int) $page['page_num'];
    if($p>4)
     {
         $p=4;
     }
    if($p==0)
    {
        return 'no image';
    }
    $images = array();
    for($i=0; $i<$p; $i++)
    {
        $img = $this->QiniuNewFileName('0.jpg');
        $imgUrl = $this->QiniuDownAndUp($pdfUrl.'?odconv/jpg/page/'.($i+1).'/density/150/quality/80/resize/500',$img,$authConfig);
        $images[$i]=$imgUrl;
    }
    return $images;
}

/*
 * 七牛上传文件方法
 * 文件、保存名称、账户配置
 * 返回文件地址URL，或者错误信息
 */
public function QiniuUploadFile($file,$fileName,$authConfig)
{
    $auth = new Auth($authConfig['accessKey'], $authConfig['secretKey']);   // 构建鉴权对象
    $token = $auth->uploadToken($authConfig['bucket']); // 生成上传 Token
    $uploadMgr = new UploadManager(); // 初始化 UploadManager 对象并进行文件的上传。
    list($ret, $err) = $uploadMgr->putFile($token, $fileName, $file);// 调用 UploadManager 的 putFile 方法进行文件的上传。
    if ($err !== null) {
        return $err;
    } else {
        return 'http://'.$authConfig['domain'].'/'.$ret['key'];
    }
}

/*
 * 下载远程文件并上传到七牛
 * 下载地址、保存文件名、账户配置
 * 返回文件地址URL，或者错误信息
 */
public function QiniuDownAndUp($url,$fileName,$authConfig)
{
    $file = file_get_contents($url);
    
    $dir = $authConfig['temp'];
    if (!is_dir($dir)) {
        if (!mkdir($dir)) {
            return false;
        }
    }

    $save = $dir.'/'.$fileName;
    file_put_contents($save, $file);
    $re = $this->QiniuUploadFile($save,$fileName,$authConfig);
    unlink($save);
    return $re;
}

/*
 * 生成新文件名，安全方法
 * 原文件名
 * 新文件名
 */
public function QiniuNewFileName($oldName)
{
    $default = 'txt';
    $oldName = strtolower($oldName);
    $old = explode('.', $oldName);
    $exe = $old[count($old)-1];
    $list = array('doc','docx','xls','xlsx','ppt','pptx','bmp','gif','jpg','jpeg','png','txt','rtf','wps','wtf','pdf','zip','rar', 'flv');//允许的后缀
    foreach ($list as $l)
    {
        if($l==$exe)
        {
            $default = $l;
            break;
        }
    }
    $new =date("ymdHis") . mt_rand(100000,999999).'.'.$default;
    return $new;
}
}


